package geeks.web;

import geeks.excepcion.DAOExcepcion;
import geeks.modelo.Idea;
import geeks.negocio.GestionIdeas;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;

@Controller
public class ManttoIdeasController {

	@RequestMapping(value = "/manttoIdeas")
	protected ModelAndView listarIdeas(HttpServletRequest request,
			HttpServletResponse response) throws Exception {

		GestionIdeas neg = new GestionIdeas();

		try {
			int accion = (request.getParameter("v").toString() == null) ? 0
					: (Integer.parseInt(request.getParameter("v")));

			switch (accion) {
			case 1:
				return new ModelAndView("registroIdea");
			case 2:
				int id = Integer.parseInt(request.getParameter("id"));
				return new ModelAndView("actualizarIdea", "IDEA",
						neg.obtener(id));
			}

		} catch (Exception e) {
			return new ModelAndView("mantenerIdeas", "LISTA", neg.listar("%"));
		}

		return new ModelAndView("mantenerIdeas", "LISTA", neg.listar("%"));
	}
	
	@RequestMapping(value = "/buscarIdeas", method = RequestMethod.POST)
	protected ModelAndView buscarIdeas(HttpServletRequest request,
			HttpServletResponse response) throws Exception {

		GestionIdeas neg = new GestionIdeas();
		String palabra = "";
		
		try {
			if(request.getParameter("txtPalabra") != null)
				palabra = request.getParameter("txtPalabra");
			
		} catch (Exception e) {
			request.setAttribute("PALABRA", palabra);
			return new ModelAndView("mantenerIdeas", "LISTA", neg.listar(palabra));
		}

		request.setAttribute("PALABRA", palabra);
		return new ModelAndView("mantenerIdeas", "LISTA", neg.listar(palabra));
	}

	@RequestMapping(value = "/registrarIdea", method = RequestMethod.POST)
	protected ModelAndView registrarIdeas(HttpServletRequest request,
			HttpServletResponse response) throws Exception {

		Idea obj = new Idea();

		obj.setTitulo(request.getParameter("txtTitulo"));
		obj.setDescripcion(request.getParameter("txtDescripcion"));
		obj.setPalabraClave1(request.getParameter("txtClave1"));
		obj.setPalabraClave2(request.getParameter("txtClave2"));
		obj.setPalabraClave3(request.getParameter("txtClave3"));
		obj.setPalabraClave4(request.getParameter("txtClave4"));
		int alumno = Integer.parseInt(request.getParameter("cboEstudiante"));
		int profesor = Integer.parseInt(request.getParameter("cboProfesor"));

		obj.setArchivo(request.getParameter("txtArchivo"));

		try {
			GestionIdeas neg = new GestionIdeas();

			Idea idea = neg.insertar(alumno, profesor, obj.getTitulo(),
					obj.getDescripcion(), obj.getPalabraClave1(),
					obj.getPalabraClave2(), obj.getPalabraClave3(),
					obj.getPalabraClave4(), obj.getArchivo(), "BORRADOR");

			if (idea != null) {
				request.setAttribute("RESULTADO", "La nueva idea \"" + obj.getTitulo() + "\", fue registrada correctamente.");
				return new ModelAndView("registroIdea");
			} else {
				throw new Exception(
						"Debe completar todos los campos correctamente.");
			}

		} catch (DAOExcepcion e) {
			request.setAttribute("IDEA", obj);
			return new ModelAndView("registroIdea", "ERROR", e.getMessage());
		} catch (Exception e) {
			request.setAttribute("IDEA", obj);
			return new ModelAndView("registroIdea", "ERROR", e.getMessage());
		}
	}

	@RequestMapping(value = "/editarIdea", method = RequestMethod.POST)
	protected ModelAndView actualizarIdea(HttpServletRequest request,
			HttpServletResponse response) throws Exception {

		Idea obj = new Idea();
		
		GestionIdeas neg = new GestionIdeas();
		
		obj.setCodigo(Integer.parseInt(request.getParameter("txtCodigo")));
		obj.setTitulo(request.getParameter("txtTitulo"));
		obj.setDescripcion(request.getParameter("txtDescripcion"));
		obj.setPalabraClave1(request.getParameter("txtClave1"));
		obj.setPalabraClave2(request.getParameter("txtClave2"));
		obj.setPalabraClave3(request.getParameter("txtClave3"));
		obj.setPalabraClave4(request.getParameter("txtClave4"));
		obj.setArchivo(request.getParameter("txtArchivo"));
		
		try {
			Idea idea = neg.actualizar(obj.getCodigo(), obj.getTitulo(), obj.getDescripcion(), obj.getPalabraClave1(), obj.getPalabraClave2(),
									   obj.getPalabraClave3(), obj.getPalabraClave4(), "BORRADOR", obj.getArchivo());

			if (idea != null) {
				request.setAttribute("RESULTADO", "La idea \"" + obj.getTitulo() + "\", fue modificada correctamente.");
				return new ModelAndView("actualizarIdea", "IDEA", idea);
			} else {
				throw new Exception(
						"Error al actualizar los datos de la idea \"" + obj.getTitulo() + "\".\nDebe completar todos los campos correctamente.");
			}
		} catch (DAOExcepcion e) {
			return new ModelAndView("mantenerIdeas", "ERROR", e.getMessage());
		} catch (NullPointerException e) {	
			return new ModelAndView("mantenerIdeas", "ERROR", e.getMessage());
		} catch (Exception e) {
			return new ModelAndView("mantenerIdeas", "ERROR", e.getMessage());
		}
	}

	@RequestMapping(value = "/eliminarIdea", method = RequestMethod.GET)
	protected ModelAndView eliminarIdea(HttpServletRequest request,
			HttpServletResponse response) throws Exception {

		int id = Integer.parseInt(request.getParameter("id").trim());

		GestionIdeas objNeg = new GestionIdeas();
		Idea obj = objNeg.obtener(id);
		
		try {
			int result = objNeg.eliminar(id);

			if (result != 0) {
				request.setAttribute("RESULTADO", "La idea \"" + obj.getTitulo() + "\" fue eliminada correctamente.");
				return new ModelAndView("mantenerIdeas", "LISTA",
						objNeg.listar("%"));
			} else {
				throw new Exception("Error al eliminar idea \"" + obj.getTitulo() + "\".");
			}
		} catch (DAOExcepcion e) {
			return new ModelAndView("mantenerIdeas", "ERROR", e.getMessage());
		} catch (Exception e) {
			return new ModelAndView("mantenerIdeas", "ERROR", e.getMessage());
		}
	}

}
